<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script type="text/javascript">
    var s = new String('HelloJavascriptWorld');

    // 调用match方法，这里返回的结果数组中只有一个匹配对象
    console.log(s.match(/a/));

    // 接下来，我们对其施加g修饰符，进行global搜索，这样就会返回两个结果
    console.log(s.match(/a/g));

    // 进行大小写无关的匹配
    console.log(s.match(/j.*t/i));

    // search()方法则会返回匹配字符串所在的位置 - index方法也可以返回
    console.log(s.match(/j.*t/i).index);
    console.log(s.search(/j.*t/i));


    // replace()可以将相关的文本替换成某些字符串
    console.log(s.replace(/[A-Z]/g,''));

    // 如果我们忽略g，则就只会替换第一个
    console.log(s.replace(/[A-Z]/,''));

    // 当某个匹配对象被找到时，如果我们想让相关的替换字符串包含匹配的文本，额可以使用$&来代替所找的匹配文本
    console.log(s.replace(/[A-Z]/g,'_$&'));

    // 如果正则表达式中分了组（就是带了括号），那么可以用$1来表示匹配到的第一组，而$2代表第二组，以此类推
    console.log(s.replace(/([A-Z])/g, "_$1"));

    // 如何验证电子邮件地址
    var email = 'lambortao@gmail.com';
    var username = email.replace(/(.*)@(.*)/, '$2');
    console.log(username);


    // 字符串回调式替换
    function replaceCallBack(match){
        return '_' + match.toLowerCase();
    }

    console.log(s.replace(/[A-Z]/g, replaceCallBack);
</script>
</body>
</html>
